/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package isd.seguridad.web;

import isd.general.util.JsfUtil;
import isd.seguridad.modelo.SG_Menu;
import isd.seguridad.rn.SG_MenuRN;

import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;


/**
 *
 * @author Claudio
 */
@ManagedBean(name="menuBean")
@ViewScoped
public class MenuBean implements Serializable {

    @EJB private SG_MenuRN menuRN;

    private String titulo;

    private SG_Menu menu;
    private TreeNode arbol;
    private TreeNode nodoSeleccionado;



    /** Creates a new instance of MenuBean */
    public MenuBean() {
    }

    @PostConstruct
    public void init(){

        titulo = "Menu Sistema";
        
        actualizarArbol();
    }

    public void actualizarArbol(){

        arbol = new DefaultTreeNode();
        generarArbol(arbol,menuRN.getListaByNivel(1,false));        
    }
    
    private void generarArbol(TreeNode raiz, List<SG_Menu> items){

        if (items==null){
            return;
        }

        if (items.isEmpty())
            return;
        //Recorremos menu principal
        for(SG_Menu m: items){
            
            TreeNode hoja = new DefaultTreeNode(m, raiz);            
            hoja.setExpanded(false);
            List<SG_Menu> subItems = menuRN.getItemsByMenu(m);
            generarArbol(hoja, subItems);
        }
    }

    public void onNodeSelect(NodeSelectEvent event) {

        nodoSeleccionado = event.getTreeNode();
        nodoSeleccionado.setExpanded(true);
        menu = (SG_Menu) event.getTreeNode().getData();

    }

    public void nuevoHijo(){

        SG_Menu mPadre = menu;
        menu = new SG_Menu();
        menu.setNivel(mPadre.getNivel()+1);
        menu.setOrden(mPadre.getMenuItem().size()+1);
        menu.setMenuPrincipal(mPadre);
        mPadre.getMenuItem().add(menu);
    }

    public void guardar(){
        try {
            menuRN.guardar(menu);
            actualizarArbol();
            JsfUtil.addInfoMessage("Los datos se guardaron correctamente");

        } catch (Exception ex) {
            JsfUtil.addErrorMessage("Error al guardar los datos");
        }
    }

    public void borrar(SG_Menu m){

        try {
            menu = null;
            menuRN.eliminar(m);
            actualizarArbol();
            JsfUtil.addWarningMessage("El menu fue borrado");

        } catch (Exception ex) {
            JsfUtil.addErrorMessage("Error al borrar los datos");
        }
    }

    public void borarItemVacio(){

        for(SG_Menu mv:menu.getMenuItem()){

            if(mv.getNombre()==null){
                menu.getMenuItem().remove(mv);
            }
        }

    }

    public void selecionar(SG_Menu m){
        
        menu = m;        
        borarItemVacio();
        
    }
    
    //----------------------------------------------------------------------    

    public SG_Menu getMenu() {
        
        return menu;
    }

    public void setMenu(SG_Menu menu) {
        this.menu = menu;
    }
 
    public TreeNode getArbol() {
        return arbol;
    }

    public void setArbol(TreeNode arbol) {
        this.arbol = arbol;
    }

    public TreeNode getNodoSeleccionado() {
        return nodoSeleccionado;
    }

    public void setNodoSeleccionado(TreeNode nodoSeleccionado) {
        this.nodoSeleccionado = nodoSeleccionado;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }



    

}

